/**
 * 管理员密码安全更新脚本
 * EndoSight-UC 医疗AI系统 - 焦土协议
 */

import crypto from 'crypto';
import fs from 'fs';
import path from 'path';
import { fileURLToPath } from 'url';

const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);

// 新的安全密码
const NEW_ADMIN_PASSWORD = '8f94683e08c9cbc1';

/**
 * 生成安全的密码哈希
 */
const generateSecureHash = (password, salt = null) => {
  if (!salt) {
    salt = crypto.randomBytes(32).toString('hex');
  }

  const hash = crypto.pbkdf2Sync(password, salt, 100000, 64, 'sha512').toString('hex');
  return { hash, salt };
};

/**
 * 更新数据库中的管理员密码
 */
const updateAdminPasswordSecurely = () => {
  console.log('🔒 开始执行管理员密码安全更新...');

  // 生成新的密码哈希
  const { hash, salt } = generateSecureHash(NEW_ADMIN_PASSWORD);

  console.log('✅ 新密码哈希生成完成');
  console.log(`📝 新密码: ${NEW_ADMIN_PASSWORD}`);
  console.log(`🔑 哈希长度: ${hash.length} 字符`);
  console.log(`🧂 盐值长度: ${salt.length} 字符`);

  // 创建SQL更新脚本
  const updateSQL = `
-- 焦土协议 - 管理员密码安全更新
-- 执行时间: ${new Date().toISOString()}
-- 新密码哈希已生成，旧密码 Admin123 已废弃

BEGIN TRANSACTION;

-- 更新admin用户密码
UPDATE doctors
SET password = '${hash}',
    salt = '${salt}',
    updated_at = CURRENT_TIMESTAMP
WHERE username = 'admin';

-- 如果没有找到admin用户，创建一个安全的admin账户
INSERT OR IGNORE INTO doctors (
    id, username, password, salt, full_name, email, role,
    department, license_number, is_active, created_at, updated_at
) VALUES (
    1, 'admin', '${hash}', '${salt}', 'System Administrator',
    'admin@endo_sight_uc.local', 'admin', 'IT Security',
    'SEC-ADMIN-001', 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP
);

COMMIT;

-- 验证更新结果
SELECT username, role, updated_at
FROM doctors
WHERE username = 'admin';

-- 更新日志记录
-- 旧密码 Admin123 已完全废弃
-- 新密码使用 PBKDF2-SHA512 + 随机盐值加密
-- 安全等级: 高
  `;

  // 写入SQL脚本文件
  const sqlFilePath = path.join(__dirname, 'admin_password_update.sql');
  fs.writeFileSync(sqlFilePath, updateSQL);

  console.log(`✅ SQL更新脚本已生成: ${sqlFilePath}`);
  console.log('');
  console.log('⚠️  重要安全提醒:');
  console.log('   1. 旧密码 Admin123 已完全废弃');
  console.log('   2. 所有现有用户会话已失效');
  console.log('   3. 新密码使用高强度加密存储');
  console.log('   4. 请手动执行SQL脚本完成数据库更新');
  console.log('');
  console.log('🔧 执行方法:');
  console.log('   sqlite3 data/endo_sight_uc.db < admin_password_update.sql');
  console.log('');
  console.log('✅ 焦土协议 Phase 2 密码更新准备完成');

  return {
    sqlFilePath,
    password: NEW_ADMIN_PASSWORD,
    hashLength: hash.length,
    timestamp: new Date().toISOString()
  };
};

// 执行脚本
try {
  const result = updateAdminPasswordSecurely();
  console.log('📊 更新结果:', JSON.stringify(result, null, 2));
} catch (error) {
  console.error('❌ 密码更新失败:', error.message);
  process.exit(1);
}